//
//@File    :	7.18_fun_ptr.cpp
//@Time    :	2021/08/14 16:58:39
//@Auther  :	Sun Sheng
//@Contact :	970340843@qq.com
//@Desc    :	pointers to functions
//

//函数指针

//1.获取函数的地址
//      函数名(后面不跟参数和括号的)就是该函数地址

//2.声明函数指针
//      double pam(int) 
//      double (*pf)(int) //(*pf)可以替换函数名
//      pf=pam            //将地址传递pam给指向函数的指针pf
//      double *pf(int)   //pf()是一个返回指针的函数

//3.使用指针来调用函数
//      double x=pam(4)     //使用函数名称来调用
//      double y=(*pf)(5)   //使用函数指针来调用
//      double y=pf(5)      //不规范!但也可以像使用函数名那样使用pf
#include <iostream>

using namespace std;

double betsy(int);
double pam(int);
void estimate(int lines,double(*pd)(int));

int main()
{
    int code;
    cout<<"How many lines of code do you need? ";
    cin>>code;
    cout<<"Here's Betsy's estimate:\n";
    estimate(code,betsy);
    cout<<"Here's Pam's estimates:\n";
    estimate(code,pam);
    system("pause");
    return 0;
}

double betsy(int lns)
{
    return 0.05 *lns;
}
double pam(int lns)
{
    return 0.03*lns+0.0004*lns*lns;
}
void estimate(int lines,double(*pf)(int))
{
    cout<<lines<<" lines will take ";
    cout<<(*pf)(lines)<<" hour(s)\n";
}